package com.foreknow.controller;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * 1.什么是会话：它是指客户端与服务器之间的数据传输（登录、购物车）
 * 2.会话管理：也就是对数据的管理
 * 3.常用的会话技术 Cookie 数据会保存在客户端  Session数据会保存在服务器端
 *
 * 什么是Cookie ：这是客户端的技术 程序会把每个用户的数据以Cookie的形式写给用户各自的浏览器，当
 * 用户使用浏览器再次访问Web服务器的时候，它会有各自的数据
 * 包javax.servlet.http.Cookie
 * 1.可以通过构造器来创建Cookie对象  Cookie (java.lang.String name , java.long.Sring value)
 * 2.设置Cookie：
 *    setMaxAge (int expiry) 设置Cookie有效时间 （以秒为单位）24*60*60
 * 3.发送cookie到浏览器端保存
 *          addCookie(Cookie cookie)
 * 4. 服务器端接受Cookie
 *          返回值类型 Cookie[]  request.getCookie()
 *
 * Cookies原理
 * 1.可以在服务器端创建一个Cookie对象，要把会话的数据存储到会话中
 *
 * 2.服务器端会送Cookie信息给浏览器，之后会把cookie保存到浏览器端
 *
 * 3.浏览器会在下一次访问的时候，会携带cookie的信息（这些信息会包含在http的请求头中）
 *
 * 4.服务器会到浏览器携带cookie的信息
 *
 * 注意：后期如果解决客户端与服务器端的多次请求（解决方案可以使用h5中的要低存储）
 *
 * setMaxAge(int exp)
 *      1.整数：表示cookie数据保存浏览器的缓存到硬盘中，数值表示要保存的时间
 *
 *      2.负数：表示cookie数据会保存在浏览器的内存中，如果浏览器关闭,cookie就失效;
 *
 *      3.0表示会删除同名的cookie数据
 *      cookie过期时间设置为0，表示会跟随系统的默认时间，与session销毁的时间相同，就是在浏览器关闭后的特定时间删除。
 *
 *   cookie的数据中能保存非中文字符串类型。可以保存多个cookie，一个浏览器可以保存300个cookie,
 *   每个站点最多可以存入20个cookie,每个cookie的大小限制为4kb
 * */
public class CookieDemo  extends HttpServlet {


    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        Cookie cookie=new Cookie("name","tom123");//创建cookie对象
//        cookie.setMaxAge(1*30*24*60*60);//设置cookie有效时间 一个月
//        resp.addCookie(cookie);
//          获取客户端Cookie
        PrintWriter out = resp.getWriter();
        Cookie[] cookies = req.getCookies();
        if (cookies!=null){
            for (Cookie c:cookies)
            {
                String name =c.getName();
                String value = c.getValue();
                out.println(name+"----"+value);
            }
        }else {out.println("没有接收到Cookie的数据");}
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req,resp);
    }
}
